package com.wlf.admin.system.controller;

import cn.hutool.core.collection.ListUtil;
import com.wlf.admin.common.util.AjaxBean;
import com.wlf.admin.system.domain.SysMenu;
import com.wlf.admin.common.dto.Const;
import com.wlf.admin.system.service.SysMenuService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.ModelAndView;

import javax.annotation.Resource;

@RestController
@RequestMapping("/menu")
public class MenuController {
    @Resource
    SysMenuService menuService;


    /**
     * 功能描述: 主页面
     *
     * @author wlf 2023/9/15 23:06
     */
    @GetMapping("/main")
    ModelAndView index() {
        ModelAndView view = new ModelAndView("/menu/index");
        view.addObject("menuTypeList", ListUtil.of(Const.MenuType.values()));
        return view;
    }

    /**
     * 添加非根节点菜单
     */
    @GetMapping("/addForm")
    ModelAndView addFormHtml(Long id) {
        ModelAndView view = new ModelAndView("menu/add");
        SysMenu parent;
        if (id == null) {
            parent = new SysMenu();
            parent.setId(0L);
            parent.setName("根菜单");
        } else {
            parent = menuService.get(id);
        }
        view.addObject("parent", parent);
        view.addObject("menuType",
                Const.MenuType.none.name().equals(parent.getType())
                        ? Const.MenuType.none.name() :
                        Const.MenuType.menu.name());
        view.addObject("menuTypeList", ListUtil.of(Const.MenuType.values()));

        return view;
    }

    /**
     * 功能描述: 编辑表单
     *
     * @author wlf 2023/9/15 23:05
     */
    @GetMapping("/editForm")
    ModelAndView editFormHtml(Long id) {
        ModelAndView view = new ModelAndView("menu/edit");
        SysMenu menu = menuService.get(id);
        SysMenu parent;
        if (menu.getPid() == 0L) {
            parent = new SysMenu();
            parent.setId(0L);
            parent.setName("根菜单");
        } else {
            parent = menuService.get(menu.getPid());
        }
        view.addObject("parent", parent);
        view.addObject("menu", menu);
        view.addObject("menuTypeList", ListUtil.of(Const.MenuType.values()));
        return view;
    }

    /**
     * 功能描述: 列表数据
     *
     * @author wlf 2023/9/15 23:05
     */
    @PostMapping("/list")
    AjaxBean list(SysMenu menu) {
        return menuService.getList(menu);
    }

    /**
     * 功能描述: 添加操作
     *
     * @author wlf 2023/9/15 23:05
     */
    @PostMapping("/add")
    AjaxBean add(SysMenu menu) {
        return menuService.add(menu);
    }

    /**
     * 功能描述: 编辑具体操作
     *
     * @author wlf 2023/9/15 23:05
     */
    @PostMapping("/update")
    AjaxBean update(SysMenu menu) {
        return menuService.update(menu);
    }

    /**
     * 功能描述: 删除表单
     *
     * @author wlf 2023/9/15 23:06
     */
    @GetMapping("/del")
    AjaxBean del(Long id) {
        return menuService.del(id);
    }
}
